﻿using QuanLyThuVien.BLL;
using QuanLyThuVien.DTO;
using QuanLyThuVien.Supporter;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace QuanLyThuVien.GUI
{
    public partial class GUIDocGia : DevComponents.DotNetBar.Office2007Form
    {
        private BLLDocGia _bllDocGia;
        private BLLLoaiDG _bllLoaiDG;
        private BLLQuyDinh _bllQuyDinh;

        private DTODocGia _DocGia;
        private THAOTAC _ThaoTac;
        private List<DTOLoaiDG> _DSLoaiDG;

        //----------------------------------------------------------------------
        //Desc: constructor mặc định
        //----------------------------------------------------------------------
        public GUIDocGia()
        {
            InitializeComponent();

            KhoiTao();
            _DocGia = new DTODocGia();
            _ThaoTac = THAOTAC.XEM;
        }

        //----------------------------------------------------------------------
        //Desc: constructor 1 tham số
        //----------------------------------------------------------------------
        public GUIDocGia(THAOTAC thaotac)
        {
            InitializeComponent();

            KhoiTao();
            _ThaoTac = thaotac;
            _DocGia = new DTODocGia();
        }

        //----------------------------------------------------------------------
        //Desc: constructor 2 tham số
        //----------------------------------------------------------------------
        public GUIDocGia(THAOTAC thaotac, DTODocGia docgia)
        {
            InitializeComponent();

            KhoiTao();
            _DocGia = docgia;
            _ThaoTac = thaotac;
        }

        //----------------------------------------------------------------------
        //Desc: khởi tạo
        //----------------------------------------------------------------------
        public void KhoiTao()
        {
            _bllDocGia = new BLLDocGia();
            _bllLoaiDG = new BLLLoaiDG();
            _bllQuyDinh = new BLLQuyDinh();

            _DSLoaiDG = new List<DTOLoaiDG>();

            DateTime ngayhientai = DateTime.Today;
            _dtNgaySinh.MinDate = new DateTime(ngayhientai.Year - 100, ngayhientai.Month, ngayhientai.Day);
            _dtNgaySinh.MaxDate = ngayhientai;
        }

        //----------------------------------------------------------------------
        //Desc: cập nhật giao diện
        //----------------------------------------------------------------------
        public void CapNhatGiaoDien()
        {
            switch (_ThaoTac)
            { 
                case THAOTAC.THEM:
                    this.Text = "LẬP THẺ ĐỘC GIẢ";
                    _btnLapTheDocGia.Visible = true;
                    _btnThemMoi.Visible = true;
                    _btnSua.Visible = false;
                    _btnNhapDS.Visible = true;

                    _txtHoTen.ReadOnly = false;
                    _txtDiaChi.ReadOnly = false;
                    _txtEmail.ReadOnly = false;
                    _cboLoaiDocGia.Enabled = true;
                    _dtNgaySinh.IsInputReadOnly = false;
                    _dtNgaySinh.ButtonDropDown.Visible = true;
                    _dtNgayLapThe.IsInputReadOnly = false;
                    _dtNgayLapThe.ButtonDropDown.Visible = true;
                    break;

                case THAOTAC.SUA:
                    this.Text = "CẬP NHẬT ĐỘC GIẢ";
                    _btnLapTheDocGia.Visible = false;
                    _btnThemMoi.Visible = true;
                    _btnSua.Visible = true;
                    _btnNhapDS.Visible = false;

                    _txtHoTen.ReadOnly = false;
                    _txtDiaChi.ReadOnly = false;
                    _txtEmail.ReadOnly = false;
                    _cboLoaiDocGia.Enabled = true;
                    _dtNgaySinh.IsInputReadOnly = false;
                    _dtNgaySinh.ButtonDropDown.Visible = true;
                    _dtNgayLapThe.IsInputReadOnly = true;
                    _dtNgayLapThe.ButtonDropDown.Visible = false;
                    break;

                case THAOTAC.XEM:
                    this.Text = "THÔNG TIN ĐỘC GIẢ";
                    _btnLapTheDocGia.Visible = false;
                    _btnThemMoi.Visible = false;
                    _btnSua.Visible = false;
                    _btnNhapDS.Visible = true;

                    _txtHoTen.ReadOnly = true;
                    _txtDiaChi.ReadOnly = true;
                    _txtEmail.ReadOnly = true;
                    _cboLoaiDocGia.Enabled = false;
                    _dtNgaySinh.IsInputReadOnly = true;
                    _dtNgaySinh.ButtonDropDown.Visible = false;
                    _dtNgayLapThe.IsInputReadOnly = true;
                    _dtNgayLapThe.ButtonDropDown.Visible = false;
                    break;
            }
        }

        //----------------------------------------------------------------------
        //Desc: cập nhật nội dung
        //----------------------------------------------------------------------
        public void CapNhatNoiDung()
        {
            switch (_ThaoTac)
            { 
                case THAOTAC.THEM:
                    try
                    {
                        _cboLoaiDocGia.SelectedIndex = 0;
                    }
                    catch { }

                    _dtNgayLapThe.Value = DateTime.Today;
                    break;
                    
                default:
                    HienThiThongTinDG();
                    break;
            }
        }

        //----------------------------------------------------------------------
        //Desc: hiển thị ds loại độc giả
        //----------------------------------------------------------------------
        public void HienThiDSLoaiDG()
        {
            _DSLoaiDG = _bllLoaiDG.LayDSLoaiDG();
            if (_DSLoaiDG == null)
                MessageBox.Show("Không lấy được danh sách loại độc giả");
            else
            { 
                for (int i = 0; i <_DSLoaiDG.Count; i++)
                {
                    try
                    {
                        _cboLoaiDocGia.Items.Add(_DSLoaiDG[i].TenLoaiDG);
                    }
                    catch
                    { }
                }
            }
        }

        //----------------------------------------------------------------------
        //Desc: hiển thị thông tin độc giả
        //----------------------------------------------------------------------
        public void HienThiThongTinDG()
        {
            if (_DocGia != null)
            {
                _txtHoTen.Text = _DocGia.HoTen;
                _txtDiaChi.Text = _DocGia.DiaChi;
                _txtEmail.Text = _DocGia.Email;
                for (int i = 0; i < _DSLoaiDG.Count; i++)
                { 
                    if (_DSLoaiDG[i].MaLoaiDG == _DocGia.LoaiDG.MaLoaiDG)
                    {
                        try
                        { 
                            _cboLoaiDocGia.SelectedIndex = i;
                        }
                        catch{ }
                        break;
                    }
                }
                 _dtNgaySinh.Value = _DocGia.NgaySinh;
                _dtNgayLapThe.Value = _DocGia.NgayLapThe;
                _dtNgayHetHan.Value = _DocGia.NgayHetHan;
                _txtTongNo.Text = _DocGia.TongNo.ToString();
            }
        }

        //----------------------------------------------------------------------
        //Desc: xóa thông tin hiển thị
        //----------------------------------------------------------------------
        public void XoaTatCa()
        {
            _txtHoTen.Text = "";
            _txtDiaChi.Text = "";
            _txtEmail.Text = "";
            _txtTongNo.Text = "0.0";
            if (_DocGia != null)
                _DocGia.Reset();
        }

        //----------------------------------------------------------------------
        //Desc: lấy dữ liệu
        //----------------------------------------------------------------------
        public DTODocGia LayDuLieu()
        {
            DTODocGia docgia = new DTODocGia();

            if (_txtHoTen.Text == "")
            {
                MessageBox.Show("Chưa nhập họ tên");
                return null;
            }
            else
                docgia.HoTen = _txtHoTen.Text;

            if (_txtDiaChi.Text == "")
            {
                MessageBox.Show("Chưa nhập địa chỉ");
                return null;
            }
            else
                docgia.DiaChi = _txtDiaChi.Text;
            
            if (_txtEmail.Text == "")
            {
                MessageBox.Show("Chưa nhập email");
                return null;
            }
            docgia.Email = _txtEmail.Text;

            if (_cboLoaiDocGia.Text == "")
            {
                MessageBox.Show("Chưa nhập loại độc giả");
            }
            docgia.LoaiDG.TenLoaiDG = _cboLoaiDocGia.Text;
            try
            {
                docgia.LoaiDG.MaLoaiDG = _DSLoaiDG[_cboLoaiDocGia.SelectedIndex].MaLoaiDG;
            }
            catch
            {
                MessageBox.Show("Không tìm thấy tên loại độc giả");
                return null;
            }

            if (_dtNgaySinh.Value == null)
            {
                MessageBox.Show("Chưa chọn Ngày Sinh");
                return null;
            }
            int tuoitoithieu = _bllQuyDinh.LayTuoiToiThieu();
            int tuoitoida = _bllQuyDinh.LayTuoiToiDa();
            if (tuoitoithieu < 0 || tuoitoida < 0)
            {
                MessageBox.Show("Không lấy được quy định về tuổi");
                return null;
            }
            else
            {
                int tuoi = DateTime.Today.Year - _dtNgaySinh.Value.Year;
                if (tuoi < tuoitoithieu || tuoi > tuoitoida)
                {
                    MessageBox.Show("Tuổi độc giả phải lớn hơn " + tuoitoithieu.ToString() + " và nhỏ hơn " + tuoitoida.ToString());
                    return null;
                }
                else
                    docgia.NgaySinh = _dtNgaySinh.Value;
            }

            try
            {
               docgia.NgayLapThe = _dtNgayLapThe.Value;
            }
            catch
            {
                MessageBox.Show("Lỗi Ngày Lập Thẻ");
                return null;
            }

            if (!_bllDocGia.TinhNgayHetHan(ref docgia))
            {
                MessageBox.Show("Không tính được ngày hết hạn");
                return null;
            }

            docgia.TongNo = 0.0F;

            if (docgia.NgayLapThe <= docgia.NgaySinh || docgia.NgayHetHan <= docgia.NgaySinh)
            {
                MessageBox.Show("Ngày sinh phải nhỏ hơn ngày lập thẻ, ngày hết hạn");
                return null;
            }

            switch(_ThaoTac)
            {
                case THAOTAC.THEM:
                    if (!_bllDocGia.PhatSinhMaDG(ref docgia))
                    {
                        MessageBox.Show("Không tạo được mã độc giả mới");
                        return null;
                    }
                    break;
                case THAOTAC.SUA:
                    docgia.MaDG = _DocGia.MaDG;
                    break;
            }

            return docgia;
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện form load
        //----------------------------------------------------------------------
        private void GUILapTheDocGia_Load(object sender, EventArgs e)
        {
            HienThiDSLoaiDG();
            CapNhatGiaoDien();
            CapNhatNoiDung();
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button Them
        //----------------------------------------------------------------------
        private void btnChapNhanTheDocGia_Click(object sender, EventArgs e)
        {
            DTODocGia docgia = LayDuLieu();
            if (docgia != null)
            {
                if (_bllDocGia.CapNhat(docgia))
                {
                    MessageBox.Show("Thêm thành công");
                    _DocGia = docgia;
                    _ThaoTac = THAOTAC.SUA;
                    CapNhatGiaoDien();
                    CapNhatNoiDung();
                }
                else
                    MessageBox.Show("Thêm thất bại");
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button Sua
        //----------------------------------------------------------------------
        private void btnSua_Click(object sender, EventArgs e)
        {
            DTODocGia docgiamoi = LayDuLieu();
            if (docgiamoi != null)
            {
                if (docgiamoi.HoTen != _DocGia.HoTen
                    || docgiamoi.DiaChi != _DocGia.DiaChi
                    || docgiamoi.Email != _DocGia.Email
                    || docgiamoi.LoaiDG.MaLoaiDG != _DocGia.LoaiDG.MaLoaiDG
                    || docgiamoi.NgaySinh != _DocGia.NgaySinh)
                {
                    if (_bllDocGia.CapNhat(docgiamoi))
                    {
                        MessageBox.Show("Sửa thành công");
                        _DocGia = docgiamoi;
                    }
                    else
                    {
                        MessageBox.Show("Sửa thất bại");
                        CapNhatNoiDung();
                    }
                    
                }
                else
                    MessageBox.Show("Chưa chọn thông tin sửa");
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button Thoat
        //----------------------------------------------------------------------
        private void btnThoatTheDocGia_Click(object sender, EventArgs e)
        {
            Close();
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button ThemMoi
        //----------------------------------------------------------------------
        private void btnThemMoi_Click(object sender, EventArgs e)
        {
            XoaTatCa();
            _ThaoTac = THAOTAC.THEM;
            CapNhatGiaoDien();
            CapNhatNoiDung();
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button NhapDS
        //----------------------------------------------------------------------
        private void btnNhapDS_Click(object sender, EventArgs e)
        {
            new GUINhapDSDocGia().Show();
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện key press
        //----------------------------------------------------------------------
        private void Special_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Utils.IsSpecialKey(e.KeyChar))
                e.Handled = true;
            else
                e.Handled = false;
        }

    }
}
